第2章: 画像のデータ表現

Author

Nicetak

Published

November 20, 2022

import cv2 as cv
import pyprojroot
from matplotlib import pyplot as plt
import numpy as np

def here(s):
    return str(pyprojroot.here(s))

2.1, 2.2

各画素のRGBの明度値の平均値が128以上の場合には, (R, G, B)=(255, 255, 255), 128未満の場合には (R, G, B)=(0, 0, 0) に書き換えることで, 画像全体を2値画像に変換するコードを作成せよ.

各画素の明度値をRGBの明度値の平均値に置き換えることで, 画像をグレースケール化し, 保存するコードを作成せよ.

mat_woman = cv.imread(here("nicetak/image/img/woman.png"))
mat_woman_rgb = cv.cvtColor(mat_woman, cv.COLOR_BGR2RGB)
height, width, _ = mat_woman.shape
mat_woman_binary = [[np.sum(mat_woman[h][w]) >= 128 * 3 for w in range(width)] for h in range(height)]
mat_woman_gray = [[np.mean(mat_woman[h][w]) for w in range(width)] for h in range(height)]

2.3

画像のR,G,Bの各チャンネルについて, 明度値の平均値と分散を表示するコードを作成し, 様々な画像を入力して試してみよ.

Mean:
 R(109), G(51), B(33)
SD:
 R(57), G(43), B (43)

Mean:
 R(199), G(204), B(197)
SD:
 R(67), G(62), B (74)

Mean:
 R(89), G(137), B(134)
SD:
 R(71), G(65), B (63)